#ifndef DIRECCION_H
#define DIRECCION_H

#include "Punto.h"

class Direccion
    {
    private:
        int valor;
    public:

    static const int DERECHA = 1;
    static const int IZQUIERDA = 2;
    static const int ARRIBA = 3;
    static const int ABAJO = 4;

    Direccion(int unValor)
        {
        this->valor = unValor;
        }

    bool esDerecha()
        {
        if(this->valor == Direccion::DERECHA)
            return true;
        return false;
        }
    bool esIzquierda()
        {
        if(this->valor == Direccion::IZQUIERDA)
            return true;
        return false;
        }
    bool esArriba()
        {
        if(this->valor == Direccion::ARRIBA)
            return true;
        return false;
        }
    bool esAbajo()
        {
        if(this->valor == Direccion::ABAJO)
            return true;
        return false;
        }

	int getDireccion(){
		return this->valor ;
	}

	// SOlo considera arriba-abajo-izquierda-derecha y no digonales
	static Direccion* calcularDireccion(Punto* origen, Punto* destino){
		Direccion* dir ;
		if(destino->getX() > origen->getX()){
			dir  = new Direccion(Direccion::DERECHA);
		
		}else if(destino->getX() < origen->getX()){
			dir  = new Direccion(Direccion::IZQUIERDA);

		}else if(destino->getY() > origen->getY()){
			dir  = new Direccion(Direccion::ABAJO);

		}else if(destino->getY() < origen->getY()){
			dir  = new Direccion(Direccion::ARRIBA);
		}
		return dir ;
	
	}
	
	void invertir(){
		if (this->esAbajo()){
			this->valor = Direccion::ARRIBA ;
		}else if (this->esArriba()){
			this->valor = Direccion::ABAJO ;
		}else if (this->esIzquierda()){
			this->valor = Direccion::DERECHA ;
		}else if (this->esDerecha()){
			this->valor = Direccion::IZQUIERDA ;
		}
	}

	int getValor(){
		return this->valor;
	}

	bool equals(Direccion* otra){
		return (this->valor == otra->getValor()) ;
	}


};
#endif